"""
属性介绍
    概述： 属性 一般是名词 ，用于描述事物外部特征的。 例如：学生 -> 学号，姓名，性别，年龄等
    分类:
        根据属性在类中编写位置的不同主要分为两类
            类变量
            对象变量
类变量介绍
    概述：
        属于类的变量，即：能被该类的所有对象所共享的变量：即：A对象修改了类变量的值，对B独享有直接的影响。
        （访问的也是修改后的）
    定义格式：
        类内： 属性名 = 属性值   要写到类的内部，函数外
    调用格式
        类名.属性名
        对象名.属性名     # 可以这么写，不会报错，但是不推荐
    细节：
        如果修改变量值 ，只能通过  类名.属性名 = 属性值的方式来修改
        如果是用  对象名.属性名 = 属性值 的方式来改变值，不是修改类变量的值，而是给给对象新增了一个
           对象变量（对象的属性）

对象变量
    概述：
        对象变量是属于每个对象的变量，即： A对象修改了他的属性值，对B对象没有任何的影响
    定义格式：
        方式一  类外定义：  对象名.属性名  = 属性值
        方式二  内内定义 ： 要定义在__init__()魔法方法中

    调用格式：
        在类内调用：     self.属性名
        在类外部调用：  对象名.属性名




"""
# 1. 定义一个学生类
class  Student:
    # 定义类变量
    teacher = '王志刚'

    # 类内定义对象属性
    def __init__(self):
        self.age = 18

# 2. 在main中演示
if __name__ == '__main__':
    # 2.1 创建学生对象
    s1 = Student()
    s2 = Student()

    # 2.2 访问类变量方式
   # print(s1.teacher) # 可以通过 对象名.属性名   访问但是不推荐
   # print(s2.teacher)
   # print(Student.teacher)

    #2.3 类外 -> 设置对象属性
    # s1.name = '聂茹凤'
    # print(s1.name)
    # # print(s2.name)
    #
    # s1.teacher = '张纪豪'
    # print(s1.teacher) # 张纪豪
    # print(s2.teacher) # 王志刚


    # 2.3 类外 访问对象变量
    s1.age = 20
    print(s1.age)
    print(s2.age)




